草庐IT

c++ - Lua C++ 表迭代

全部标签

c++ - iostream 迭代器如何工作?

从标准模板库中,我开始了解istream和ostream迭代器。我不明白他们是如何工作的。我也不明白为什么要使用它们。它们为什么有用? 最佳答案 流迭代器为iostream的格式化提取/插入操作提供迭代器接口(interface)。例如,请考虑以下内容:std::vectorv;for(intn;std::cin>>n;)v.push_back(n);这相当于:std::vectorv(std::istream_iterator(std::cin),std::istream_iterator{});推进迭代器执行一次提取,类似于st

c++ - "Unresolved overloaded function type"尝试将 for_each 与 C++ 中的迭代器和函数一起使用时

//for(unsignedinti=0;i我正在尝试使用for_each循环代替for循环进行赋值。我不确定为什么会收到此错误消息:Infunctionâvoidclean_entry(conststd::string&,std::string&)â:prog4.cc:62:40:error:nomatchingfunctionforcalltoâfor_each(std::basic_string::iterator,std::basic_string::iterator,)â 最佳答案 写:for_each(c.begin()

c++ - 在 C++ 11 中迭代模板类

假设,我有这样定义的类:templateclassA{...}问题是如何用N遍历这个类?for(unsignedinti=0;i().doStuff();}也许C++11中有一些新功能或者contrexp的一些很酷的用法。下一个问题是:如果可能的话——如何存储这些类?更新我知道它在编译时有效。假设,我有多达10个这样的全局类,它们仅在N上有所不同。例如:Afirst;Asecond;Athird;Afourth;并且假设,我应该调用比我的值大N的那个人。如果没有机会迭代,那么我就得写很长的if-else结构。voiddoAppropriateStuff(intvalue){if(val

c++ - 使用 C++ 11 在二叉树(或任意树)上实现迭代器

我想在二叉树上创建一个迭代器,以便能够使用基于范围的for循环。我知道我应该首先实现begin()和end()函数。开始应该指向根。然而,根据规范,end()函数返回“最后一个有效元素之后的元素”。那是哪个元素(节点)?指向一些“无效”的地方不是违法的吗?另一件事是运算符++。返回树中“下一个”元素的最佳方法是什么?我只需要一些建议来开始这个编程。我想扩展/扩充我的问题*。如果我想遍历具有任意数量的树怎么办?让每个节点都有一个子vector,让begin()指向“真正的”根。我可能必须在迭代器类中实现一个队列(广度优先)来将unique_ptr存储到节点,对吗?然后,当队列为空时,我会

c++ - 如何通过 decltype 声明迭代器的值

在C++98中,我通常使用以下代码在迭代器的值类型中声明一个变量:typenamestd::iterator_traits::value_typevalue;在C++11中我们有decltype,我认为推断值类型的最简单方法是:decltype(*iterator)value;不幸的是,对于大多数迭代器,*迭代器的类型是value_type&而不是value_type。在没有类型修改类的情况下,有什么想法如何将上述内容转化为产生value_type(而不是任何引用)?我不认为这个问题是不合理的,因为以下内容相当可靠,但最终会创建另一个变量。autox=*iterator;decltyp

c++ - 如何迭代重载 operator[] 的类?

这个问题在这里已经有了答案:WhatfunctionsmustIimplementtomakeaclassiterable?[duplicate](1个回答)Howtoallowrange-forlooponmyclass?[duplicate](3个答案)关闭4年前。我有这样一个类:classC{private:std::unordered_mapm={{'a',1},{'b',2},{'c',3}};public:intoperator[](constchar&key)const{returnm.find(key)->second;}};是否可以在不修改类的情况下迭代map的元素?

c++ - map 的 union 迭代器?

[前言:像std::map这样的关联C++容器有点像只有一个键列的微型数据库。Boost的bimap将其提升为一个双列表,在两列中进行查找,但仅此而已——没有“polymap”概括这个想法。]无论如何,我想继续将map视为数据库,现在我想知道是否有一个迭代器(或其他解决方案)允许我对几个组成map进行UNION。也就是说,所有映射都具有相同的类型(或值类型和比较器,至少),我想要一个迭代器将整个集合视为一个大的多映射(重复的键是可以的)并让我在正确的union中遍历它订单。这样的东西是否存在,也许在Boost中?或者很容易组装一个?在伪代码中:std::mapm1,m2;union_i

c++ - 自定义迭代器适用于 std::sort 但不适用于 tbb::parallel_sort?

我正在尝试使用tbb::parallel_sort同时对2个数组进行排序。英特尔的文档在这里说https://software.intel.com/en-us/node/506167对迭代器和序列的要求与std::sort相同。。似乎并非如此。我的自定义迭代器与std::sort一起工作得很好,但与tbb::parallel_sort一起产生编译错误。请看下面的代码:intmain()//needsboostandtbbtocompile{intvalues_size=6;intnums1[]={5,8,7,89,56,4};intnums2[]={2,1,1,4,9,2};//WOR

c++ - 如何实现类似std的迭代器的自定义实现?

我编写了一个非常简单的文件管理数据库,基本上看起来像这样:classFileDB{public:FileDB(std::stringdir):rootDir(dir){}voidloadFile(std::stringfilename,File&file)const;voidsaveFile(std::stringfilename,constFile&file)const;private:std::stringrootDir;}现在,我想像使用std::iterator一样遍历数据库中包含的所有文件:voiditerateFiles(){FileDBfiledb("C:\\MyFile

c++ - 从 std::set::insert() 返回迭代器是常量?

这个问题在这里已经有了答案:HowcanIimprovethisdesignthatforcesmetodeclareamemberfunctionconstanddeclarevariablesmutable?(3个答案)关闭9年前。根据C++引用,set::insert应该返回对,其中迭代器指向新插入的元素或现有元素(如果存在)。但是我在给迭代器赋值时遇到了问题,正如这个简单的例子所示:intmain(){setset;*set.insert(5).first=5;return0;}我已经尝试过G++和Clang,但都不起作用。set.cc:7:24:error:read-only